/**
 * chen.an
 * Created by chenan on 2017/6/21.
 */
+function($){
     var ratio = window.devicePixelRatio || 1;
        //缩略图大小
      var  thumbnailWidth = 100 * ratio, thumbnailHeight = 100 * ratio;
      

    $.fn.upload = function(params){
    	  //数量
        this.inputClass = 0,
        //class前缀
        this.classFristName = "ca_";
        var that = this;
        that.options = {
    		 /**
             *  文件上传按钮id
             */
    		btnDomId:"#filePicker",
            /**
             *  文件上传地址 默认/ajax/webuploader.html
             */
            url:"/ajax/upload",
            /**
             * all不限制 img图片 file文件 默认 img
             */
            type:"img",
            /**
             * 列表input保存路径的name
             */
            inpName:"url",
            /**
             * 列表input保存文件名的name
             */
            inpFName:"para",
            /**
             * 是否单个 默认 false
             */
            single:false,
            /**
             * 上传数量 默认4个
             */
            size:4,
            /**
             * 文件大小KB
             */
            fileSize:3*1024*1024,
            /**
             * 选完后自动上传
             */
            auto:true,
            /**
             * 上传flash
             */
            swf:'/resource/webuploader/Uploader.swf',
            /**
             * domid
             */
            domId:""
        }
        $.extend(this.options,params);
        //设置domId
        this.options.domId = "#"+ $(this).attr("id");

        this.classFristName =  this.classFristName + $(this).attr("id");
        	
        this.options.size = this.options.single?1:this.options.size;
        
        console.log("文件数量：" + this.options.size);
        
       var accept = null;
       if(this.options.type=="img"){
           accept ={extensions: 'gif,jpg,jpeg,bmp,png',  mimeTypes: 'img/*'};
           this.options.fileSize=1*1024*1024;
        }else if(this.options.type=="file"){
           accept = {extensions : 'xls,doc,xlsx,docx,rar,pdf,ppt', mimeTypes : 'application/vnd.ms-excel,application/excel,application/msword,application/pdf,application/vnd.ms-powerpoint'};
        }else if(this.options.type=="pdf"){
        	accept = {extensions : 'pdf', mimeTypes : 'application/pdf'};
        }
       //修改时初始化
       editInit(that);
       //初始化上传控件
       var  uploader = WebUploader.create({
                pick : {
                    id : that.options.btnDomId,
                    multiple : !that.options.single
                },
                //每个文件大小 kb
                fileSingleSizeLimit: that.options.fileSize,
                // 选完文件后，是否自动上传。
                auto : that.options.auto,
                // swf文件路径
                swf : that.options.swf ,
                // 文件接收服务端。
                server : that.options.url,
                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建，可能是input元素，也可能是flash.
                // 只允许选择图片文件。
                accept :accept,
                // 验证文件总数量, 超出则不允许加入队列
//				fileNumLimit : 3,
                threads: 1
            });
       	//事件绑定
        uploadBind(uploader,that);
        return {
        	/**
        	 * 获得对象
        	 */
        	get:function(){
        		return uploader;
        	},
        	/**
        	 * 重新加载
        	 */
        	reload:function(){
        		uploader.refresh();
        	}
        	
        	
        }
    }

    
    
    /**
     * 编辑时初始化
     */
    function  editInit(t) {
    	var opts = t.options;
    	
        var items = $(opts.domId).find('.img-close');
        if(items.length > 0){
            t.inputClass = items.length;
        }
        var fileType = null;
        // 编辑
        for(var i = 0; i < items.length;i++, t.inputClass++){
        	var idClass = t.classFristName +  t.inputClass;
        	
        	$(opts.domId).find('.img-close').eq(i).attr("id",idClass);
            var url = ($(opts.domId).find('img').eq(i).attr("src")||"").replace('http://','');
            var s = url.substring(0,url.indexOf('/')+1);
            url = url.replace(s,'');
           
            if(fileType ==null){
         	   fileType = url.substring(url.lastIndexOf("."));
            }
            var infodiv = $(opts.domId).find('.info').eq(i);
            var fname = infodiv?infodiv.text():"";
            $(opts.domId).append("<input type='hidden' class='"+idClass+"' name='" + opts.inpName + "' value='"+url+"' />");
            $(opts.domId).append("<input type='hidden' class='"+idClass+"' name='" + opts.inpFName + "' value='"+fname+"' />");
        }
        //加统一样式
        if(/(gif|jpg|jpeg|bmp|png)+/g.test(fileType)){
    		$(opts.domId).find('img').css({ width : thumbnailWidth +"px", height : thumbnailHeight+"px"});
    	}else{
    		$(opts.domId).find('img').remove();
    		$(opts.domId).find('.file-item').css({ width:"300px", height:"45px" });
    		$(opts.domId).find('.info').css({ width:"300px", height:"30px" });
    	}
//        $(opts.domId).find('img').css({ width : thumbnailWidth +"px", height : thumbnailHeight+"px"});
        $(opts.domId).find('.img-close').css({
                position:"absolute",
                top:0,
                zIndex: 100,
                right:0,
                width:"14px",
                height:"14px",
                lineHeight: "12px",
                borderRadius: "7px",
                background:"#ccc",
                textAlign:"center" ,
                cursor:"pointer"
        }).html("x");
        
        $(opts.domId).find('.img-close').bind('click',function(){
        	var _index = $(this).attr('id');
            $(this).parent().remove();
            $('.'+_index).remove();
            console.log(_index)
        });
    }

    /**
     * 上传事件绑定
     * @param uploader
     */
    function uploadBind(uploader,t) {
    	var opts = t.options;
        /**
         * 文件上传成功，给item添加成功class, 用样式标记上传成功。
         */
        uploader.on('uploadSuccess', function(file,reason) {
        	 
        	var idClass = t.classFristName + t.inputClass;
            var urlLen = $(opts.domId).find("input[name='"+opts.inpName+"']").length;
            
            if(!opts.single){ 
            	if(urlLen >= opts.size) return ;
	            $('#' + file.id).addClass('upload-state-done');
	            $(opts.domId).find('.img-close').unbind('click');
	
                $(opts.domId).append("<input type='hidden' class='"+idClass+"' name='"+opts.inpName+"' value='"+reason.url+"' />");//文件路径
                $(opts.domId).append("<input type='hidden' class='"+idClass+"' name='"+opts.inpFName+"' value='"+reason.filName+"' />");//文件名
	            
	            $(opts.domId).find('.img-close').bind('click',function(){
	            	var _index = $(this).attr('id');
	            	console.log(_index)
	                $(this).parent().remove();
	                $('.'+_index).remove();
	                uploader.removeFile(uploader.getFile(file.id));
	            });
           }else{
        	   var v = $(opts.domId).find("input[name='"+opts.inpName+"']").val();
        	   if(urlLen >= opts.size && v) return ;
            	if(urlLen > 0){
            		$(opts.domId).find("input[name='"+opts.inpName+"']").val(reason.url).addClass(idClass);//路径
                    $(opts.domId).find("input[name='"+opts.inpFName+"']").val(reason.fileName).addClass(idClass);//文件名
            	}else{
            		 $(opts.domId).append("<input type='hidden' class='"+idClass+"' name='"+opts.inpName+"' value='"+reason.url+"' />");//文件路径
                     $(opts.domId).append("<input type='hidden' class='"+idClass+"' name='"+opts.inpFName+"' value='"+reason.fileName+"' />");//文件名
            	}
           }
            
        });
        
        /**
         * 当有文件添加进来的时候
         */
        uploader.on('fileQueued', function(file) {
        	console.log(file);
        	 var list = $(opts.domId).find(".uploader-list");
        	 var div = $("<div></div>").attr("id",file.id).addClass("file-item thumbnail");
        	 var info =$("<div></div>").addClass("info").html(file.name);
        	 
        	if(/image\/[\w]+/g.test(file.type)){
	            var img =$("<img>").css({ width : thumbnailWidth+"px", height : thumbnailHeight+"px"});
	            
	            if($(opts.domId).find('.img-close').length >= opts.size){
	            	if(layer){
	            		layer.msg('最多只能上传' + opts.size + '个文件！',{icon:2});
	            	}else{
	            		alert('最多只能上传' + opts.size + '个文件！');
	            	}
	                return false;
	            } else{
	            	t.inputClass++;
	            	
	            	var idClass = t.classFristName + t.inputClass;
	                var imgCloseDiv = $("<div></div>")
	                                .addClass("img-close").attr("fid",file.id)
	                                .attr("id",idClass)
	                                .css({
	                                        position:"absolute",
	                                        top:0,
	                                        right:0,
	                                        width:"14px",
	                                        height:"14px",
	                                        lineHeight: "12px",
	                                        borderRadius: "7px",
	                                        background:"#ccc",
	                                        textAlign:"center" ,
	                                        cursor:"pointer"
	                                }).html("x");
	                $(div).append(imgCloseDiv);
	                $(div).append(img).append(info);
	
	                // 创建缩略图
	                // 如果为非图片文件，可以不用调用此方法。
	                // thumbnailWidth x thumbnailHeight 为 100 x 100
	                uploader.makeThumb(file, function(error, src) {
	                    if (error) return;
	                    $(img).attr('src', src);
	                }, thumbnailWidth, thumbnailHeight);
	            }
        	}else{
        		 if($(opts.domId).find('.img-close').length >= opts.size){
 	               if(layer){
	            		layer.msg('最多只能上传' + opts.size + '个文件！',{icon:2});
	            	}else{
	            		alert('最多只能上传' + opts.size + '个文件！');
	            	}
 	                return false;
 	            } else{
 	            	t.inputClass++;
        		var idClass = t.classFristName + t.inputClass;
                var imgCloseDiv = $("<div></div>")
                                .addClass("img-close")
                                .attr("id",idClass).attr("fid",file.id)
                                .css({
                                        position:"absolute",
                                        top:0,
                                        zIndex: 100,
                                        right:0,
                                        width:"14px",
                                        height:"14px",
                                        lineHeight: "12px",
                                        borderRadius: "7px",
                                        background:"#ccc",
                                        textAlign:"center" ,
                                        cursor:"pointer"
                                }).html("x");
                  $(div).css({ width:"350px", height:"45px" });
                  $(info).css({ width:"350px",height:"30px"});
        		  $(div).append(imgCloseDiv).append(info);
 	            }
        	}
        	$(list).append(div);
        	
        	$(opts.domId).find('.img-close').unbind();
        	$(opts.domId).find('.img-close').bind('click',function(){
            	var _index = $(this).attr('id');
            	var fid = $(this).attr('fid');
                $(this).parent().remove();
                $('.'+_index).remove();
                if(fid){
                	uploader.removeFile(fid, true);
                }
            });
        	 
        });

        /**
         * 文件上传过程中创建进度条实时显示。
         */
        uploader.on('uploadProgress', function (file, percentage) {
        	$('#' + file.id).find(".info").hide();
        	
            var $li = $('#' + file.id), $percent = $li.find('.progress span');
            // 避免重复创建
            if (!$percent.length) {
                $percent = $('<p class="progress"><span style="color:red;"></span></p>').appendTo($li).find('span');
            }
        	if(/image\/[\w]+/g.test(file.type)){
        		$li.find('.progress').css({ width: "100px" ,textAlign:"center",fontSize:"25px",fontWeight:"bold"});
        	}else{
        		$li.find('.progress').css({ width: "350px" ,textAlign:"center",fontSize:"25px",fontWeight:"bold",height: "40px"}); 
        	}
            
            $percent.html(Math.round(percentage * 100) + '%');
        });

        /**
         * 文件上传失败，显示上传出错。
         */
        uploader.on('uploadError', function (file) {
        	console.log(file)
        	$('#' + file.id).find(".info").hide();
            var $li = $('#' + file.id), $error = $li.find('div.error');
            // 避免重复创建
            if (!$error.length) {
                $error = $('<div class="error"></div>').appendTo($li);
            }
            $error.text('上传失败');
        });

        /**
         * 完成上传完了，成功或者失败，先删除进度条。
         */
        uploader.on('uploadComplete', function (file) {
            $('#' + file.id).find('.progress').remove();
            $('#' + file.id).find(".info").show();
        });
        /**
         * 上传报错
         */
        uploader.on('error', function (type) {
        	//F_DUPLICATE  文件已在列表中
        	//Q_TYPE_DENIED  文件类型错误
        	//Q_EXCEED_SIZE_LIMIT 文件超出设置大小
            if(type=="F_DUPLICATE"){
	            if(layer){
	        		layer.msg('文件(图片)已在列表中！请重新上传！',{icon:2});
	        	}else{
	        		alert('文件(图片)已在列表中！请重新上传！');
	        	}
            }else if(type=="Q_TYPE_DENIED"){
            	 if(layer){
                 	layer.msg('请上传正确格式的文件(图片)!请重新上传！',{icon:2});
                 }else{
                 	alert('请上传正确格式的文件(图片)！请重新上传！');
                 }
	        }else if(type=="Q_EXCEED_SIZE_LIMIT"||type == 'F_EXCEED_SIZE'){
	        	if(layer){
	        		layer.msg('文件(图片)已超出文件设置的大小!请重新上传！',{icon:2});
	        	}else{
	        		alert('文件(图片)已超出文件设置的大小!请重新上传！');
	        	}
	        }else{
	        	if(layer){
	        		layer.msg('文件(图片)上传发生错误!请重新上传！',{icon:2});
	        	}else{
	        		alert('文件(图片)上传发生错误!请重新上传！');
	        	}
	        }
           
        });
    }

}(jQuery);
